package pack01;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * @作者：JustOne
 * @时间：2021/8/12 - 16:46
 */
public class Demo01_写的五个方法 {
    public static void main(String[] args) throws IOException {

        /*
         * 简介(景景知道即可，不用讲)：
         * 1,RandomAccessFile不属于InputStream和OutputStream类系的它是一个完全独立的类，
         *   所有方法(绝大多数都只属于它自己)都是自己从头开始规定的,这里面包含读写两种操作。
         * 2,RandomAccessFile能在文件里面前后移动，在文件里移动用的seek( ),所以它的行为与其它的I/O类有些根本性的不同。
         *   总而言之，它是一个直接继承Object的，独立的类。只有RandomAccessFile才有seek搜寻方法，而这个方法也只适用于文件.
         * 3,RandomAccessFile的方法虽然多，但它有一个最大的局限-【只能操作硬盘上的文件】，不能读写其他IO节点。
         */

        //重要信息：
        // 在GBK下，英文占一个字节，中文占两个字节
        // 在UTF-8下，英文占一个字节，中文占三个字节

        //《写》
        //方法一：raf.writeInt();//------写一个int
        //方法二：raf.writeChar();//-----写一个char
        //方法三：raf.write(int);//------仅写低8位
        //方法四：raf.write(byte[]);//---把你给你数组写完
        //方法五：raf.write(byte[],n,m);//把这个byte型数组的n-m项的内容写进去。
        //RAF读写文件是基于文件指针进行的，即：RAF总是在文件指针指向的文件位置进行读写字节。
        //并且读写后指针会自动后移到下一个字节位置。

        //创建RAF时需要指定权限。常用权限有r和rw。在r权限下如果你指定的文件不存在会报异常，
        //在rw权限下如果你指定的文件不存在会自动创建。
        //如果没有该文件则创建后再写
        RandomAccessFile raf = new RandomAccessFile("D:/刘景景的测试文件夹/记事本.txt","rw");

        //方法一：ref.writeInt();//------写一个int
        //raf.writeInt(998);
        //写出后发现占四个字节，因为一个int占四个字节
        //写出后打开记事本，发现是乱码，
        //如果此时打开文件，看到的可能是乱码，因为我写的是int，而你理解的是String。不用理会。
        //于是我们可以去另写一篇，用于读，发现可以读到刚才写的内容
        //讲这个内容，最好是同时写两个类，一个写，一个读。


        //方法二：raf.writeChar();//-----写一个char
        raf.writeChar('刘');


        //方法三：raf.write(int);//------仅写低8位
        //raf.write('慢');
        //0110 0001 0110 0010 --- 24930 慢
        //0110 0010 ------------- 98    b
        //原意是写慢，但这样只能写低8位(右)，于是写成了b


        //方法四：raf.write(byte[]);//---把你给你数组写完
        /*
        String str = "和我在珠海的街头走一走";
        byte[] data = str.getBytes("UTF-8");
        raf.write(data);
        */

        //方法五：raf.write(byte[],n,m);//把这个byte型数组从第n项开始写，写m个
        //执行完以下代码后，如果打开记事本，可以看到前3个字，因为一个汉字在UTF-8编码中占三个字节
        /*
        String str = "和我在麻城的街头走一走";
        byte[] data = str.getBytes("UTF-8");
        raf.write(data,3,12);//从3开始，写6个，即[我在麻城]
        */

        //示例六：获取文件大小
        //raf.length()
        //要讲，不然作业做不了


        System.out.println("over");
        raf.close();

    }
}
